package com.kaitian.demo.demo_boot_starter.service;

public interface IRedisService {

    /**
     * 测试Redis事务
     */
    void testRedisTrancation();

    /**
     * 测试Redis流水线
     */
    void testRedisPipline();

    /**
     * 测试Redis 消息订阅
     */
    void testRedisMessage();

    /**
     * Redis分布式锁实现超卖
     */
    void testRedisOverSale();

    /**
     * 初始化商品库存信息
     */
    void initProduct(String key, Integer num);

    /**
     * 不使用锁，百分百出现超卖
     * @param i
     */
    Integer buyProduct0(String key, Integer i);

    /**
     * 不使用锁，百分百出现超卖
     * @param i
     */
    Integer buyProduct1(String key, Integer i);

    /**
     * 方法上使用synchronized关键字，解决了超卖问题
     * @param i
     */
    Integer buyProduct2(String key, Integer i);

    /**
     * 部分代码上使用synchronized关键字，解决了超卖问题
     * @param i
     */
    Integer buyProduct3(String key, Integer i);

    /**
     * 双重校验所，未解决超卖问题
     * @param i
     */
    Integer buyProduct4(String key, Integer i);

    /**
     * Redis NX分布式锁，解决超卖问题
     * @param i
     */
    Integer buyProduct5(String key, Integer i);

    /**
     * 使用Redis事务，进行超卖问题处理
     * @param i
     */
    Integer buyProduct6(String key, Integer i);
}
